package com.ruoyi.system.domain;

import java.util.Date;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 群组信息对象 app_group_info
 *
 * @author ruoyi
 * @date 2023-02-27
 */
public class AppGroupInfo extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * $column.columnComment
     */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    /**
     * 群主id
     */
    @Excel(name = "群主id")
    private Long userId;

    /**
     * 群主名称
     */
    @TableField(exist = false)
    private String userName;

    /**
     * 群类型，0：普通群，1：特殊群
     */
    @Excel(name = "群类型，0：普通群，1：特殊群")
    private Integer type;

    /**
     * $column.columnComment
     */
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    private Integer kind;

    /**
     * 群组类型：Private/Public/ChatRoom/AVChatRoom/BChatRoom
     */
    @Excel(name = "群组类型：Private/Public/ChatRoom/AVChatRoom/BChatRoom")
    private String groupType;

    /**
     * 群组id，群号码
     */
    @Excel(name = "群组id，群号码")
    private String groupId;

    /**
     * 群名称
     */
    @Excel(name = "群名称")
    private String groupName;

    /**
     * 群简介
     */
    @Excel(name = "群简介")
    private String groupInftro;

    /**
     * 群公告
     */
    @Excel(name = "群公告")
    private String notification;

    /**
     * 群头像
     */
    @Excel(name = "群头像")
    private String faceUrl;

    /**
     * 申请加群处理方式。包含 FreeAccess（自由加入），NeedPermission（需要验证），DisableApply（禁止加群），不填默认为 NeedPermission（需要验证）
     */
    @Excel(name = "申请加群处理方式。包含 FreeAccess", readConverterExp = "自=由加入")
    private String applyJoinOption;

    /**
     * 设置全员禁言（选填）:"On"开启，"Off"关闭
     */
    @Excel(name = "设置全员禁言", readConverterExp = "选=填")
    private String shutUpAllMember;

    /**
     * $column.columnComment
     */
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    private Integer isNoticeLottery;

    /**
     * $column.columnComment
     */
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    private Integer isWinNotice;

    /**
     * 群人数超过50人时，添加人数功能，0：关闭，1：开启
     */
    @Excel(name = "群人数超过50人时，添加人数功能，0：关闭，1：开启")
    private Integer isAddMember;

    /**
     * 邀请截止时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "邀请截止时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date addExprieTime;

    /**
     * 群人数限制
     */
    @Excel(name = "群人数限制")
    private Integer memberLimit;

    /**
     * 冻结状态，0：正常，1：冻结
     */
    @Excel(name = "冻结状态，0：正常，1：冻结")
    private Integer freezeState;

    @TableField(exist = false)
    private Boolean freezeStateEnable;

    /**
     * 基数
     */
    @Excel(name = "基数")
    private Long numbers;

    @TableField(exist = false)
    @ApiModelProperty("群成员ids")
    private String groupMemberIds;

    private String greetingContext;

    /**
     * 禁止退群 0 开启 1 关闭
     */
    private Integer isExit;

    /**
     * 群人数
     */
    @TableField(exist = false)
    private Integer groupNum;

    @TableField(exist = false)
    private Boolean isExitEnable;

    /**
     * 默认群
     */
    private Integer isDefault;
    /**
     * 是否隐藏 1 隐藏 2 显示
     */
    private Integer isHide;

    private Integer baseNumber;

    public Integer getBaseNumber() {
        return baseNumber;
    }

    public void setBaseNumber(Integer baseNumber) {
        this.baseNumber = baseNumber;
    }

    public Integer getIsHide() {
        return isHide;
    }

    public void setIsHide(Integer isHide) {
        this.isHide = isHide;
    }

    @TableField(exist = false)
    private Boolean isDefaultEnable;

    public Boolean getFreezeStateEnable() {
        return freezeStateEnable;
    }

    public void setFreezeStateEnable(Boolean freezeStateEnable) {
        this.freezeStateEnable = freezeStateEnable;
    }

    public Integer getIsDefault() {
        return isDefault;
    }

    public void setIsDefault(Integer isDefault) {
        this.isDefault = isDefault;
    }

    public Boolean getDefaultEnable() {
        return isDefaultEnable;
    }

    public void setDefaultEnable(Boolean defaultEnable) {
        isDefaultEnable = defaultEnable;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Boolean getExitEnable() {
        return isExitEnable;
    }

    public void setExitEnable(Boolean exitEnable) {
        isExitEnable = exitEnable;
    }

    public Integer getGroupNum() {
        return groupNum;
    }

    public void setGroupNum(Integer groupNum) {
        this.groupNum = groupNum;
    }

    public Integer getIsExit() {
        return isExit;
    }

    public void setIsExit(Integer isExit) {
        this.isExit = isExit;
    }

    public String getGreetingContext() {
        return greetingContext;
    }

    public void setGreetingContext(String greetingContext) {
        this.greetingContext = greetingContext;
    }

    public String getGroupMemberIds() {
        return groupMemberIds;
    }

    public void setGroupMemberIds(String groupMemberIds) {
        this.groupMemberIds = groupMemberIds;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public Long getUserId() {
        return userId;
    }

    public void setType(Integer type) {
        this.type = type;
    }

    public Integer getType() {
        return type;
    }

    public void setKind(Integer kind) {
        this.kind = kind;
    }

    public Integer getKind() {
        return kind;
    }

    public void setGroupType(String groupType) {
        this.groupType = groupType;
    }

    public String getGroupType() {
        return groupType;
    }

    public String getGroupId() {
        return groupId;
    }

    public void setGroupId(String groupId) {
        this.groupId = groupId;
    }

    public void setGroupName(String groupName) {
        this.groupName = groupName;
    }

    public String getGroupName() {
        return groupName;
    }

    public void setGroupInftro(String groupInftro) {
        this.groupInftro = groupInftro;
    }

    public String getGroupInftro() {
        return groupInftro;
    }

    public void setNotification(String notification) {
        this.notification = notification;
    }

    public String getNotification() {
        return notification;
    }

    public void setFaceUrl(String faceUrl) {
        this.faceUrl = faceUrl;
    }

    public String getFaceUrl() {
        return faceUrl;
    }

    public void setApplyJoinOption(String applyJoinOption) {
        this.applyJoinOption = applyJoinOption;
    }

    public String getApplyJoinOption() {
        return applyJoinOption;
    }

    public void setShutUpAllMember(String shutUpAllMember) {
        this.shutUpAllMember = shutUpAllMember;
    }

    public String getShutUpAllMember() {
        return shutUpAllMember;
    }

    public void setIsNoticeLottery(Integer isNoticeLottery) {
        this.isNoticeLottery = isNoticeLottery;
    }

    public Integer getIsNoticeLottery() {
        return isNoticeLottery;
    }

    public void setIsWinNotice(Integer isWinNotice) {
        this.isWinNotice = isWinNotice;
    }

    public Integer getIsWinNotice() {
        return isWinNotice;
    }

    public void setIsAddMember(Integer isAddMember) {
        this.isAddMember = isAddMember;
    }

    public Integer getIsAddMember() {
        return isAddMember;
    }

    public void setAddExprieTime(Date addExprieTime) {
        this.addExprieTime = addExprieTime;
    }

    public Date getAddExprieTime() {
        return addExprieTime;
    }

    public void setMemberLimit(Integer memberLimit) {
        this.memberLimit = memberLimit;
    }

    public Integer getMemberLimit() {
        return memberLimit;
    }

    public void setFreezeState(Integer freezeState) {
        this.freezeState = freezeState;
    }

    public Integer getFreezeState() {
        return freezeState;
    }

    public void setNumbers(Long numbers) {
        this.numbers = numbers;
    }

    public Long getNumbers() {
        return numbers;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("createTime", getCreateTime()).append("userId", getUserId()).append("type", getType()).append("kind", getKind()).append("groupType", getGroupType()).append("groupId", getGroupId()).append("groupName", getGroupName()).append("groupInftro", getGroupInftro()).append("notification", getNotification()).append("faceUrl", getFaceUrl()).append("applyJoinOption", getApplyJoinOption()).append("shutUpAllMember", getShutUpAllMember()).append("isNoticeLottery", getIsNoticeLottery()).append("isWinNotice", getIsWinNotice()).append("isAddMember", getIsAddMember()).append("addExprieTime", getAddExprieTime()).append("memberLimit", getMemberLimit()).append("freezeState", getFreezeState()).append("numbers", getNumbers()).toString();
    }
}
